package com.ssy.lingxi.order.service.web;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.MemberPaymentDO;
import com.ssy.lingxi.order.model.bo.PaymentParameterBO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderPayChannelVO;
import com.ssy.lingxi.order.model.vo.payment.request.PaymentParameterInsertOrUpdateVO;
import com.ssy.lingxi.order.model.vo.payment.response.PaymentParameterItemVO;
import com.ssy.lingxi.order.model.vo.payment.response.PaymentParameterPayTypeDetailVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 支付能力 - 会员支付参数配置相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-08-12
 */
public interface IMemberPaymentParameterService {
    /**
     * 查询支付参数配置详情
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<List<PaymentParameterPayTypeDetailVO>> findMemberPaymentParameters(HttpHeaders headers);

    /**
     * 根据支付渠道，查询支付参数下拉框列表
     * @param headers HttpHeaders信息
     * @param channelVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<PaymentParameterItemVO>> findMemberPaymentPayChannelParameters(HttpHeaders headers, OrderPayChannelVO channelVO);

    /**
     * 校验前端传递的参数设置
     * @param insertOrUpdateVO 接口参数
     * @return 校验结果
     */
    Wrapper<Void> checkMemberPaymentParameters(PaymentParameterInsertOrUpdateVO insertOrUpdateVO);

    /**
     * 新增或修改会员支付参数设置
     * @param headers HttpHeaders信息
     * @param parameterVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> createMemberPaymentParameters(HttpHeaders headers, PaymentParameterInsertOrUpdateVO parameterVO);

    /**
     * 根据平台后台 - 通用商户参数配置，新增或修改所有会员支付参数
     * @param payType 支付方式
     * @param payChannel 支付渠道
     * @param paymentParameters 支付参数列表
     * @return 操作结果
     */
    Wrapper<Void> insertOrUpdateMemberPaymentParameter(Integer payType, Integer payChannel, List<PaymentParameterBO> paymentParameters);

    /**
     * 根据平台后台 - 商户支付参数配置，新增或修改会员支付参数
     * @param memberPayment 商户支付参数配置
     * @return 操作结果
     */
    Wrapper<Void> insertOrUpdateMemberPaymentParameter(MemberPaymentDO memberPayment);

    /**
     * 根据平台后台 - 商户支付参数配置，删除会员支付参数
     * @param memberPayment 商户支付参数配置
     * @return 操作结果
     */
    Wrapper<Void> removeMemberPaymentParameter(MemberPaymentDO memberPayment);
}
